package hh.util.jwt;

import io.jsonwebtoken.*;
import io.jsonwebtoken.io.Encoders;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.nio.channels.Pipe;
import java.security.Key;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Date;
// https://github.com/jwtk/jjwt/#quickstart
public class JwtTest {
    public static void main(String[] args) {


        // 自动生成一个公钥和私钥
        KeyPair pair = Keys.keyPairFor(SignatureAlgorithm.RS256);
        PrivateKey pri = pair.getPrivate();
        PublicKey pub = pair.getPublic();



        String pubKey = Encoders.BASE64.encode(pub.getEncoded());
        String priKey = Encoders.BASE64.encode(pri.getEncoded());

        // 给用户 小李颁布一个使用 公钥加密的
        JwtBuilder builder= Jwts.builder()
                .setId("9527")   //设置唯一编号
                .setSubject("小李")//设置主题  可以是JSON数据
                .setIssuedAt(new Date())//设置签发日期
                .signWith(pri,SignatureAlgorithm.RS256);

        //构建 并返回一个字符串
        String jwsString = builder.compact();
        System.out.println(jwsString);

        Jws<Claims> jws = Jwts.parserBuilder()  // (1)
                .setSigningKey(pri)         // (2)
                .build()                    // (3)
                .parseClaimsJws(jwsString);// (4)
        System.out.println("解密："+jws);
    }
}
